package 剑指专题.位运算;


/*
 * Author：江松
 * Date：2023/4/2 10:19
 *
 数组中只出现1次的2个数字：
 1，哈希表
 2，异或，二次异或为0，则异或结果为只出现1次的2个数，然后将他们不同位做划分，再次异或即可得出结果
 */

public class Main4 {
    public int[] FindNumsAppearOnce (int[] array) {
        int xor=0;
        for(int i:array){
            xor^=i;
        }
        int bit=0;
        while((xor&(1<<bit))==0){
            bit++;
        }
        int res1=0,res2=0;
        for(int i:array){
            if((i&(1<<bit))!=0){
                res1^=i;
            }else{
                res2^=i;
            }
        }
        int ans[]=new int[2];
        if(res1<res2){
            ans[0]=res1;
            ans[1]=res2;
        }else {
            ans[0]=res2;
            ans[1]=res1;
        }
        return ans;
    }
}
